<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
</body>
</html>
<script>
	//正则表达式Regular 
   //Expression，也叫规则表达式
   //描述了匹配文本的一种方式（模式）；可以检测字符串中是否包含某子串，可以替换或者删除符合规则的字符串

   //正则表达式的两种字符
   //普通字符  a - z, A - Z, 0 - 9 
   //元字符：具有特殊含义的字符，可以规定其前导字符出现的模式

   //创建正则的两种方式
   //参数1： pattern模式，匹配的规则，必须是字符串
   //参数2： attributes，可选，i，g，m
   //i(ignore)忽略大小写
   //g(global)全局匹配
   //m(multiple)多行匹配
   //var reg = new RegExp(参数1,参数2)
    
    //第二个选项如果指定只能写一个
   var reg = new RegExp("a","i");//忽略大小写
   var str = "abcdefg";

   //正则表达式方法
   console.dir(reg);

   //test方法返回boolean
   //检测字符串是否匹配正则表达式
   console.log(reg.test(str));

   //创建正则的第二种方式
   var reg2 = /abc/igm;
   console.log(reg2.test("abcde"));

   //特殊字符
   /*
     \n:换行
     \t:水平制表符
     \v：垂直制表符
     \r:大回车
     \d：数字
     \D:非数字
     \w:数字，字母，下划线，一共63个字符
     \W:非数字，字母，下划线
     \s:空白符，空格，回车，制表符
     \S:非空白符
     .:除\n之外的字符
     []:匹配括号中出现的字符
     [^]:匹配括号中未出现的字符，


     */

     var reg3 = /./;
     str = "\n\n\na";
     console.log(reg3.test(str));//如果没有a，则false

     str = "asfb38dsflj239"
     var reg4 = /\d/;
     console.log(reg4.test(str));
     
     var reg5 = /\D/
     console.log(reg5.test(str));

     //匹配十六进制表示的Unicode字符
     var reg6 = /\u6211/;
     console.log(reg6.test("我爱你"));
     //出现a或者b或者c
     var reg7 = /[abs]/;
     str = "a56";
     console.log(reg7.test(str));
     
     //只要出现a，b，c之外的字符就匹配成功
     var reg8 = /[^bac]/;//var reg8 = /[^bac]/g;加g：全局匹配
     str = "abcd";
     console.log(reg8.test(str));

     //连字符
     //[0-9],代表0-9
     //[A-Z],代表大写字母
     //[a-z]，代表小写字母

     //exec(str)方法
     //返回的结果，index：匹配的子串的位置，input匹配的字符串
     //正则对象的lastIndex下次匹配的的开始位置
      str = "I love you and you love me because I am lovely";
      var reg9 = /love/g;
      r = reg9.exec(str);
      console.log(r);
      console.dir(reg9.lastIndex);
      r = reg9.exec(str);
      console.log(r);
      console.dir(reg9.lastIndex);
      
      r = reg9.exec(str);
      console.log(r);
      console.dir(reg9.lastIndex);
      //匹配不到，返回null
      r = reg9.exec(str);
      console.log(r);
      console.dir(reg9.lastIndex);

      str = "I love work,work make me happy,work make rich,work make me love making friends,work is good"
      var result;
      var reg10 = /work/g;
      while((result = reg10.exec(str)) !== null){
      	document.write(result[0] + "index:" + result.index + "<br>");
      	console.log(result);
      }

      //字符串方法
      //match方法
      //参数正则
      //返回值为数组，数组中存放符合规则的子串

      str = "abc23de56fjk78";
      var reg11 = /\d/g;
      r = str.match(reg11);
      console.log(r);

      //search()
      //返回符合规则的子串的位置，会自动忽略全局搜索，只匹配第一个搜索到的，如果查不到结果，返回-1
 
      str = "I love you";
      reg = /love/;
      r = str.search(reg);
      console.log(r);//2

      //split分割,返回一个数组（字符串或正则）
      str = "abcf13d14sjfjirkgl9";
      r = str.split(/\d/);
      console.log(r);

      str = "13435666@qq.com";
      //用.分割字符串
      //reg = /\./;
      reg = /[@.]/   //当要去掉.时，不加中括号的.要写成\.
      r = str.split(reg);
      console.log(r);//["13435666","qq","com"]


      //replace替换
      str = "I hate hate you";
      r = str.replace(/hate/g,"love");
      console.log(r); 


      //$1,$2....$99子表达式匹配的文本，括号中的






      str = 'style = "width: 80px;height:100px;border:2px solid black"';
      reg = /\d+px/g;
      r = str.replace(reg,function(s){
      	var num = parseInt(s);
      	console.log(num);
      	return num / 2 + "px";
      });
      console.log(r);
      

      reg = /nnnd|nmd/g;
      str = "nnnd nmd ni zhen hao";
      r = str.replace(reg,function(work){
      	console.log(work);
      	return "***";
      });
      console.log(r);
       


       //量词
       //{n} 出现n次
       //{n,}至少出现n次
       //{m,n}出现m-n次
       str = "hello888good8888a";
       reg = /8{3}/g;
       r = str.split(reg)
       console.log(r);

       // + 至少出现一次
       // *, >=0; 比如\d*表示大于0的数字
       //?,{0,1}  


       //定位符
       // ^ 出现在开头位置
       // $ 出现在结束位置
       // \b 匹配单词的左右边界

       str = "abc.jpg"; 
       //reg = /^abc/;//true
       //reg = /\.jpg$/;//true

       console.log(reg.test(str));
       
       // \r windows 下换行 \n 也有效
       str = "ab\nc.jpg";
       //reg = /^c/;//false
       // \m 只有出现^或者$的时候才有意义，\n代表换行
       reg = /^c/m;
       reg = /b$/m;
       console.log(reg.test(str));


       str = "money moon mo mood money moom momo";
       // \b 匹配单词的左边界
       //reg = /\bmo/g;

       // \b 匹配单词的右边界
       //reg = /mo\b/g;

       //reg = /\bmo\b/g;
       console.log(str.match(reg));


       //匹配以下字符时需要转义
       //{, }, [, ], +, *, ., $, ^, /, |, (, ), ?等






</script>